﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Npgsql;

namespace VoteInformationSystem.Models
{
    public class NpgsqlZweitstimmenProWahlkreisRepository : IZweitstimmenProWahlkreisRepository
    {
        public IEnumerable<ZweitstimmenProWahlkreis> GetByWahlkreis(int Id, int IdVorherigeBundestagswahl)
        {
            IList<ZweitstimmenProWahlkreis> zweitstimmenProWahlkreis = new List<ZweitstimmenProWahlkreis>();

            using (NpgsqlConnection pgConnection = NpgsqlConnectionProvider.GetConnection())
            {

                using (NpgsqlCommand command = new NpgsqlCommand("select * from \"ZweitstimmenproWahlkreisInformationen\"(:id, :idvorherigebundestagswahl)",
                                                                 pgConnection))
                {
                    command.Parameters.Add(new NpgsqlParameter("id", NpgsqlTypes.NpgsqlDbType.Integer));
                    command.Parameters.Add(new NpgsqlParameter("idvorherigebundestagswahl", NpgsqlTypes.NpgsqlDbType.Integer));
                    command.Prepare();
                    command.Parameters.First<NpgsqlParameter>().Value = Id;
                    command.Parameters.Last<NpgsqlParameter>().Value = IdVorherigeBundestagswahl;
                    using (NpgsqlDataReader dataReader = command.ExecuteReader())
                    {
                        while (dataReader.Read())
                        {
                            zweitstimmenProWahlkreis.Add(new ZweitstimmenProWahlkreis()
                                                             {
                                                                 Parteiname =
                                                                     dataReader.GetString(0),
                                                                 AnzahlStimmen =
                                                                     Convert.ToInt32(dataReader.GetValue(1)),
                                                                 ProzentStimmen = 
                                                                    Convert.ToInt32(dataReader.GetValue(2)),
                                                                 AnzahlVorherigeStimmen =
                                                                    (dataReader.GetValue(3).Equals(DBNull.Value)? 0 : Convert.ToInt32(dataReader.GetValue(3))),
                                                                 ProzentVorherigeStimmen = 
                                                                    (dataReader.GetValue(4).Equals(DBNull.Value)? 0 : Convert.ToInt32(dataReader.GetValue(4)))
                                                             });
                        }
                    }
                }
            }

            return zweitstimmenProWahlkreis;
        }
    }
}